In general, an embedded system may be described as a special purpose computing system designed to perform one or a few dedicated functions. Embedded systems are commonly used in consumer devices like personal digital assistants, mobile phones, videogame consoles, microwaves, washing machines, alarm systems, and digital cameras. In addition to the consumer space, embedded systems are used in nearly every industry, from telecommunications to manufacturing, and from transportation to medical devices. In fact, embedded systems are so commonly in use today that it is not feasible to exhaustively list specific examples.
The term “embedded system” does not have a precise definition, and determining what is and is not an embedded system can be difficult. For example, a general purpose computer, such as a laptop, is not typically characterized as an embedded system. However, a laptop is usually composed of a multitude of subsystems such as the hard disk drive, the motherboard, the optical drive, the video processing unit, and various communication devices. Many of the individual subsystems comprising the laptop may themselves be embedded systems.
The complexity of embedded systems can vary from, for example, systems with a single microcontroller chip and a light emitting diode to systems with multiple microprocessor units and various peripheral communication interfaces and mechanical parts. Manufacturers of modern microprocessors are increasingly adding components and peripheral modules to their microprocessors, creating what may be thought of as embedded processors. This type of embedded system is often referred to as a system on a chip (SoC). A simple example of a system on chip is an application-specific integrated circuit (ASIC) packaged with a universal serial bus (USB) port. Additionally, embedded systems range from those having no user interface at all to those with full user interfaces similar to a desktop operating system.
There are many advantages to using embedded systems. For example, an embedded system typically is designed to do some specific task, as opposed to being a general purpose computer with a wide range of features for performing many different tasks. As a result, design engineers can optimize the embedded system for the desired task, which assists in reducing the size and cost of the device as well as increasing its reliability and performance. Furthermore, functionalities can be designed into an embedded system that would not be feasible using hardware alone.
The software that operates an embedded system is generally referred to as “firmware.” Firmware is often stored on read only memory (“ROM”) based storage devices. For example, flash-based read only memory or electronically erasable read only memory (“EEPROM”) devices are often used to store firmware. The firmware is used to control the various features, functioning, and interfaces of the embedded system. Thus, a digital video disk player will have firmware that processes the appropriate response to an input, such as the user pressing the “power” button or the “play” button. Additionally, the firmware in this example would control the storage mechanism, the digital processing circuitry used to decode and output onto the appropriate ports the video and audio signals stored on the video storage medium, as well as the user interface allowing the user to configure settings of the digital video disk player.
Modern embedded systems often allow the user to execute an additional application, commonly referred to as an “app,” on the device. For example, an app may be loaded into a memory location accessible by the embedded system such that the app may be executed by the embedded systems firmware. As those of skill in the art will appreciate, apps interact with the various hardware components of the embedded system through control calls, sometimes referred to as input/output control (IOCTL) calls, which are made available by the firmware. As those of skill in the art will further appreciate, these various control calls allow software (e.g. an app) to cause the hardware components to perform specified functions, including sending inputs to and receiving outputs from the hardware components. Typically, the firmware will have a specified set of control calls, which application developers may reference when building applications for execution by the embedded system. Each system call is typically assigned an index number, commonly referred to as an IOCTL number, whereby the system call can be referenced.
In this manner, a particular hardware component may be accessed by addressing the hardware component and referencing the index number corresponding to a particular control call. As those of skill in the art will appreciate, it is often necessary to provide support for non-standard hardware components. As such, the control call system implemented by an embedded systems firmware must be extensible to allow for the addition of new hardware components and configuring these hardware components with existing or new control calls. Furthermore, it is often desirable that a control call (e.g. corresponding to a single index number) be supported by more than one hardware component. Under these conditions, the conventional techniques for assigning control call index numbers are insufficient for dealing with non-standard hardware components that must support the same control calls.